home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / ms-0.07 / xms / menu.c < prev    next >
C/C++ Source or Header  |  1995-06-26  |  6KB  |  237 lines

  1. /* menu.c - popup menu using the SimpleMenu widget */
  2.  
  3. /* (This needs Xaw, and it won't work with X11R3 or older) */
  4.    
  5. /*  
  6.     This file is part of MandelSpawn, a network Mandelbrot program.
  7.  
  8.     Copyright (C) 1990-1993 Andreas Gustafsson
  9.  
  10.     MandelSpawn is free software; you can redistribute it and/or modify
  11.     it under the terms of the GNU General Public License, version 1,
  12.     as published by the Free Software Foundation.
  13.  
  14.     MandelSpawn is distributed in the hope that it will be useful,
  15.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.     GNU General Public License for more details.
  18.  
  19.     You should have received a copy of the GNU General Public License,
  20.     version 1, along with this program; if not, write to the Free 
  21.     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22. */
  23.  
  24. #include <stdio.h>
  25.  
  26. #include <X11/IntrinsicP.h>
  27. #include <X11/Xos.h>
  28. #include <X11/StringDefs.h>
  29.  
  30. #include <X11/Xaw/MenuButton.h>
  31. #include <X11/Xaw/SimpleMenu.h>
  32. #include <X11/Xaw/Sme.h>
  33. #include <X11/Xaw/SmeBSB.h>
  34.  
  35. #include <X11/Xaw/Cardinals.h>
  36.  
  37. #include "MsP.h"    /* this is really part of the Ms widget */
  38. #include "Mama.h"
  39.  
  40. extern Screen *myScreen;
  41.  
  42. /* menu choice callbacks */
  43. void
  44.   ZoomPopChoice(), ZoomNopopChoice(), ZoomOutPopChoice(),
  45.   ZoomOutNopopChoice(), 
  46.   JuliaNopopChoice(), JuliaPopChoice(), WindowStatsChoice(),
  47.   SlaveStatisticsChoice(), AnimationChoice(), CloseChoice(), 
  48.   QuitChoice();
  49.  
  50. char msDefaultTranslations[] = 
  51.     "<Btn1Down>:    BeginBox()        \n\
  52.      <Btn1Motion>:    StretchBox()        \n\
  53.      <Btn1Up>:        EndBox()        \n\
  54.      Shift<Btn2Down>:    Zoom(nopop,nojulia,in)    \n\
  55.      <Btn2Down>:    Zoom(popup,nojulia,in)    \n\
  56.      <Btn3Down>:    XawPositionSimpleMenu(menu) MenuPopup(menu) \n\
  57.      Shift<Key>z:    Zoom(nopop,nojulia,in)    \n\
  58.      <Key>z:        Zoom(popup,nojulia,in)    \n\
  59.      Shift<Key>o:    Zoom(nopop,nojulia,out)    \n\
  60.      <Key>o:        Zoom(popup,nojulia,out)    \n\
  61.      Shift<Key>j:    Zoom(nopop,julia,in)    \n\
  62.      <Key>j:        Zoom(popup,julia,in)    \n\
  63.      <Key>s:        ApplStats()        \n\
  64.      <Key>w:        WindowStats()        \n\
  65.      <Key>c:        Close()            \n\
  66.      <Key>q:        Quit()            \n\
  67.   ";
  68.  
  69.  
  70. void MsCreateMenu(w, julia_enabled, animation_enabled)
  71.      MsWidget w;
  72.      int julia_enabled;
  73.      int animation_enabled;
  74. { Arg arglist[10];
  75.   int num_args=0;
  76.  
  77.   XtSetArg(arglist[num_args], XtNlabel, "MandelSpawn menu");
  78.   num_args++;
  79.  
  80.   XtSetArg(arglist[num_args], XtNdepth, DefaultDepthOfScreen(myScreen));
  81.   num_args++;
  82.   XtSetArg(arglist[num_args], XtNvisual, DefaultVisualOfScreen(myScreen));
  83.   num_args++;
  84.   XtSetArg(arglist[num_args], XtNcolormap, DefaultColormapOfScreen(myScreen));
  85.   num_args++;
  86.   
  87.   w->ms.menu = XtCreatePopupShell("menu", simpleMenuWidgetClass, (Widget) w, 
  88.     arglist, num_args);
  89.  
  90.   XtAddCallback(
  91.     XtCreateManagedWidget("Zoom",
  92.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  93.     XtNcallback, ZoomPopChoice, (caddr_t) w);
  94.  
  95. #ifndef POPUP_ONLY
  96.   XtAddCallback(
  97.     XtCreateManagedWidget("Zoom (old window)", 
  98.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  99.     XtNcallback, ZoomNopopChoice, (caddr_t) w);
  100. #endif
  101.  
  102.   XtAddCallback(
  103.     XtCreateManagedWidget("Inverse zoom",
  104.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  105.     XtNcallback, ZoomOutPopChoice, (caddr_t) w);
  106.  
  107. #ifndef POPUP_ONLY
  108.   XtAddCallback(
  109.     XtCreateManagedWidget("Inverse zoom (old window)", 
  110.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  111.     XtNcallback, ZoomOutNopopChoice, (caddr_t) w);
  112. #endif
  113.   
  114.   if(julia_enabled)
  115.   {
  116.     XtAddCallback(
  117.       XtCreateManagedWidget("Julia set",
  118.         smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  119.       XtNcallback, JuliaPopChoice, (caddr_t) w);
  120. #ifndef POPUP_ONLY
  121.     XtAddCallback(
  122.       XtCreateManagedWidget("Julia set (old window)", 
  123.     smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  124.       XtNcallback, JuliaNopopChoice, (caddr_t) w);
  125. #endif
  126.   }
  127.   XtAddCallback(
  128.     XtCreateManagedWidget("Performance statistics", 
  129.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  130.     XtNcallback, SlaveStatisticsChoice, (caddr_t) w);
  131.   XtAddCallback(
  132.     XtCreateManagedWidget("Show view coordinates", 
  133.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  134.     XtNcallback, WindowStatsChoice, (caddr_t) w);
  135.   if(animation_enabled)
  136.   { XtAddCallback(
  137.       XtCreateManagedWidget("Colormap animation on/off", 
  138.     smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  139.       XtNcallback, AnimationChoice, (caddr_t) w);
  140.   }
  141.   XtAddCallback(
  142.     XtCreateManagedWidget("Close this window", 
  143.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  144.     XtNcallback, CloseChoice, (caddr_t) w);
  145.   XtAddCallback(
  146.     XtCreateManagedWidget("Quit MandelSpawn", 
  147.       smeBSBObjectClass, w->ms.menu, NULL, ZERO),
  148.     XtNcallback, QuitChoice, (caddr_t) w);
  149. }
  150.  
  151. void ZoomNopopChoice(wx, client_data)
  152.      Widget wx;
  153.      caddr_t client_data;
  154. { MsWidget w=(MsWidget) client_data;
  155.   ZoomIn(w, 0, 0, 0);
  156. }
  157.  
  158. void ZoomPopChoice(wx, client_data)
  159.      Widget wx;
  160.      caddr_t client_data;
  161. { MsWidget w=(MsWidget) client_data;
  162.   ZoomIn(w, 1, 0, 0);
  163. }
  164.  
  165. void ZoomOutNopopChoice(wx, client_data)
  166.      Widget wx;
  167.      caddr_t client_data;
  168. { MsWidget w=(MsWidget) client_data;
  169.   ZoomIn(w, 0, 0, 1);
  170. }
  171.  
  172. void ZoomOutPopChoice(wx, client_data)
  173.      Widget wx;
  174.      caddr_t client_data;
  175. { MsWidget w=(MsWidget) client_data;
  176.   ZoomIn(w, 1, 0, 1);
  177. }
  178.  
  179. void JuliaNopopChoice(wx, client_data)
  180.      Widget wx;
  181.      caddr_t client_data;
  182. { MsWidget w=(MsWidget) client_data;
  183.   ZoomIn(w, 0, 1, 0);
  184. }
  185.  
  186. void JuliaPopChoice(wx, client_data)
  187.      Widget wx;
  188.      caddr_t client_data;
  189. { MsWidget w=(MsWidget) client_data;
  190.   ZoomIn(w, 1, 1, 0);
  191. }
  192.  
  193.  
  194. void 
  195. WindowStatsChoice(wx, client_data)
  196.      Widget wx;
  197.      caddr_t client_data;
  198. { MsWidget w=(MsWidget) client_data;
  199.   WindowStats(w);
  200. }
  201.  
  202. void 
  203. SlaveStatisticsChoice(wx, client_data)
  204.      Widget wx;
  205.      caddr_t client_data;
  206. { MsWidget w=(MsWidget) client_data;
  207.   SlaveStatistics(w->ms.mama);
  208. }
  209.  
  210.  
  211. void 
  212. AnimationChoice(wx, client_data)
  213.      Widget wx;
  214.      caddr_t client_data;
  215. { MsWidget w=(MsWidget) client_data;
  216.   AnimationToggle(w->ms.mama);
  217. }
  218.  
  219.  
  220. /* Destroy this window (only) */
  221. void 
  222. CloseChoice(wx, client_data)
  223.      Widget wx;
  224.      caddr_t client_data;
  225. { MsWidget w=(MsWidget) client_data;
  226.   XtDestroyWidget(XtParent(w)); /* destroy the shell widget */
  227. }
  228.  
  229.  
  230. /* Ask Mama to shut down */
  231. void 
  232. QuitChoice(w, client_data)
  233.      Widget w;
  234.      caddr_t client_data;
  235. { Shutdown(((MsWidget) client_data)->ms.mama);
  236. }
  237.